package com.harmony.pilot.knowledge.repository;

import com.harmony.pilot.knowledge.entity.FileMetadata;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 文件元数据Repository
 */
@Repository
public interface FileMetadataRepository extends JpaRepository<FileMetadata, Long> {
    
    /**
     * 根据文件路径查找
     */
    Optional<FileMetadata> findByFilePath(String filePath);
    
    /**
     * 根据扫描状态查找
     */
    List<FileMetadata> findByScanStatus(String scanStatus);
    
    /**
     * 查找待扫描的文件
     */
    List<FileMetadata> findByScanStatusIn(List<String> statuses);
    
    /**
     * 根据文件类型查找
     */
    List<FileMetadata> findByFileType(String fileType);
    
    /**
     * 根据模块名查找
     */
    List<FileMetadata> findByModuleName(String moduleName);
    
    /**
     * 查找测试文件
     */
    List<FileMetadata> findByIsTestTrue();
    
    /**
     * 查找Mock文件
     */
    List<FileMetadata> findByIsMockTrue();
    
    /**
     * 查找Fuzzer文件
     */
    List<FileMetadata> findByIsFuzzerTrue();
    
    /**
     * 统计总文件数
     */
    @Query("SELECT COUNT(f) FROM FileMetadata f")
    long countTotal();
    
    /**
     * 统计已扫描文件数
     */
    @Query("SELECT COUNT(f) FROM FileMetadata f WHERE f.scanStatus = 'COMPLETED'")
    long countScanned();
    
    /**
     * 统计各类型文件数量
     */
    @Query("SELECT f.fileType, COUNT(f) FROM FileMetadata f GROUP BY f.fileType")
    List<Object[]> countByFileType();
    
    /**
     * 统计各模块文件数量
     */
    @Query("SELECT f.moduleName, COUNT(f) FROM FileMetadata f GROUP BY f.moduleName")
    List<Object[]> countByModuleName();
}

